<?php
    if($_SERVER['SERVER_PORT'] != 443) {
        echo "<html><head></head>\n<body>\n";
        echo "<br><br><br>\n";
        echo "<p><a href=\"https://in-architecture.artez.nl\">Klik hier om door te gaan naar de site</a>\n";
        echo "<p><a href=\"https://in-architecture.artez.nl\">Click here to continue to the website</a>\n";
        echo "<script>\nwindow.location = \"https://in-architecture.artez.nl\";\n</script>\n";
        echo "</body>\n</html>\n";
        exit();
    }


define("TIME_STARTED", microtime(true));
error_reporting(E_ALL);

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');
mb_language('uni');

date_default_timezone_set("Europe/Amsterdam");
setlocale(LC_CTYPE, "nl_NL", "nld_nld", "nl");
setlocale(LC_NUMERIC, "en_EN", "eng_eng", "en", "En-Us");
setlocale(LC_TIME, "nl_NL", "nld_nld", "nl");

// define('PATH', dirname($_SERVER['SCRIPT_FILENAME']));
define('PATH', $_SERVER['DOCUMENT_ROOT']);
define('HOSTNAME', $_SERVER['HTTP_HOST']);
define('PROTOCOL', (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://");
define('URL', PROTOCOL.HOSTNAME);
define('REQUEST', $_SERVER['REQUEST_URI']);
define('METHOD', $_SERVER['REQUEST_METHOD']);
define('IP', $_SERVER['REMOTE_ADDR']);
define('NOW', date('Y-m-d H:i:s'));
define('TODAY', date('Y-m-d'));
define('DATA_DIRECTORY', '/data');
define('LOGS_DIRECTORY', DATA_DIRECTORY.'/logs');
define('IMAGES_DIRECTORY', DATA_DIRECTORY.'/images');
define('FILES_DIRECTORY', DATA_DIRECTORY.'/files');
define('CACHE_DIRECTORY', DATA_DIRECTORY.'/cache');

// function exception_error_handler ($severity, $message, $file, $line) {
//   if (!(error_reporting() & $severity)) {
//     return;
//   }
//   throw new ErrorException($message, 0, $severity, $file, $line);
// }
// set_error_handler("exception_error_handler");

try {
  include(PATH.'/framework/classes/Framework.php');
  $framework = new Framework();
  $framework->load('/framework');
  $_directory = '/'.date('Y').'/'.date('m');
  $_filename = '/'.date('d').'.log';
  $log = new Log($_directory, $_filename);
  unset($_directory, $_filename);
} catch (Exception $error) {
  $errorMessage = $error->getMessage();
  die("<strong>Unexpected error while initializing framework</strong> - {$errorMessage}");
}

try {
  require(PATH.'/config.php');
  include(PATH.'/framework/defaults.php');
  include(PATH.'/framework/functions/helpers.php');
  include(PATH.'/framework/lib/Parsedown.php');
  if (ENABLE_DATABASE) {
    $db = new Database('mysql', DB_NAME, DB_HOST, DB_USER, DB_PASS);
  }
} catch (Exception $error) {
  $errorMessage = $error->getMessage();
  $log->error($errorMessage);
  $framework->logExecutionTime();
  die("<strong>Unexpected error</strong> - {$errorMessage}");
}

try {
  // $cache = new CacheFS(PATH.CACHE_DIRECTORY);
  $cache = new CacheDB("_cache");
} catch (Exception $error) {
  die("<strong>Unexpected error</strong> - {$errorMessage}");
}

try {
  $framework->init();
} catch (Excepton $error) {
  $errorMessage = $error->getMessage();
  $log->error($errorMessage);
  $framework->logExecutionTime();
  die("<strong>Unexpected error</strong> - {$errorMessage}");
}

/*
Search for a valid Route to answer REQUEST. The Route will be required from
this location, so all variables created in this scope are globals.

Expected globals: $framework, $app, $log, $db, $request
*/
try {
  list($path, $app) = $framework->route(REQUEST, METHOD);
  $request = $framework->getRequest();
  $app->init();
  $framework->markTime("init");
  require($path);
  $framework->markTime("exec");
} catch (Exception $error) {
  $errorMessage = $error->getMessage();
  $log->error($errorMessage);
  $framework->logExecutionTime();
  die("<strong>Unexpected error</strong> - {$errorMessage}");
}

$framework->end();
